from PyQt5.QtCore import QDir
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
 
 
class QFileDialogDemo(QWidget):
    def __init__(self):
        super(QFileDialogDemo, self).__init__()
        self.initUI()
 
    def initUI(self):
        #垂直布局
        layout=QVBoxLayout()
 
        self.btn1=QPushButton('加载图片')
        self.btn1.clicked.connect(self.loadImage)
        layout.addWidget(self.btn1)
 
        #用标签来作为显示图片的地方
        self.imageLabel=QLabel()
        layout.addWidget(self.imageLabel)
 
        self.btn2=QPushButton('加载文本文件')
        self.btn2.clicked.connect(self.loadText)
        layout.addWidget(self.btn2)
 
        #多行编辑框
        self.contents=QTextEdit()
        layout.addWidget(self.contents)
 
        self.dialog=QFileDialog()
 
        self.setLayout(layout)
        self.setWindowTitle('文件对话框演示')
 
    #槽函数
    def loadImage(self):
        #参数三是默认路径（自己随便设）,参数四是过滤哪些文件，比如下面就是只显示jpg或者png文件
        #fname,a=QFileDialog.getOpenFileName(self,'打开文件','.','图像文件(*.jpg *.png)')
        fname, _ = QFileDialog.getOpenFileName(self, '打开文件', 'D:\\', '图像文件(*.jpg *.png)')
        print(fname)
        print(_)
        self.imageLabel.setPixmap(QPixmap(fname))
 
    def loadText(self):
        #设置打开文件模式
        self.dialog.setFileMode(QFileDialog.AnyFile)#任何文件
        #设置过滤器，只显示过滤器允许的文件类型
        self.dialog.setFilter(QDir.Files) #?????????
        if self.dialog.exec():
            #选择文件
            filenames=self.dialog.selectedFiles()
            print(filenames)#列表，就一个元素，就是选中的文件的绝对路径
            f=open(filenames[0],mode='r',encoding='utf-8')#打开第一个文件
            # with会自动调用文件的close()函数，防止我们忘记
            with f:
                data=f.read()
                self.contents.setText(data)
 
 
if __name__=='__main__':
    app=QApplication(sys.argv)
    main=QFileDialogDemo()
    main.show()
    sys.exit(app.exec_())
